import type { 
  IScheduleTemplate, 
  IScheduleInstance, 
  IScheduleTemplateCreateRequest, 
  IScheduleTemplateUpdateRequest,
  IScheduleInstanceCreateRequest,
  IScheduleInstanceUpdateRequest
} from '../schedule';
import type { IStudent } from '../student';
import type { ICourse } from '../course';

/**
 * 每日课表视图组件属性
 */
export interface IDailyScheduleViewProps {
  /** 日期 */
  date: string;
  /** 课程实例列表 */
  scheduleInstances: IScheduleInstance[];
  /** 学生列表 */
  students: IStudent[];
  /** 课程列表 */
  courses: ICourse[];
  /** 视图模式 */
  viewMode: 'single' | 'multiple';
  /** 选中的学生ID列表 */
  selectedStudents: string[];
  /** 课程实例点击回调 */
  onInstanceClick?: (instance: IScheduleInstance) => void;
  /** 日期变化回调 */
  onDateChange?: (date: string) => void;
  /** 添加课程回调 */
  onAddSchedule?: (date: string, timeSlot?: string) => void;
  /** 自定义样式类名 */
  className?: string;
  /** 是否只读模式 */
  readonly?: boolean;
}

/**
 * 周历视图组件属性
 */
export interface IWeeklyCalendarViewProps {
  /** 周开始日期 */
  weekStartDate: string;
  /** 课程实例列表 */
  scheduleInstances: IScheduleInstance[];
  /** 学生列表 */
  students: IStudent[];
  /** 课程列表 */
  courses: ICourse[];
  /** 选中的学生ID列表 */
  selectedStudents: string[];
  /** 日期点击回调 */
  onDateClick?: (date: string) => void;
  /** 课程实例点击回调 */
  onInstanceClick?: (instance: IScheduleInstance) => void;
  /** 周变化回调 */
  onWeekChange?: (weekStartDate: string) => void;
  /** 添加课程回调 */
  onAddSchedule?: (date: string, timeSlot?: string) => void;
  /** 自定义样式类名 */
  className?: string;
  /** 是否只读模式 */
  readonly?: boolean;
}

/**
 * 课程模板表单组件属性
 */
export interface IScheduleTemplateFormProps {
  /** 课程模板信息（编辑时传入） */
  template?: IScheduleTemplate;
  /** 学生列表 */
  students: IStudent[];
  /** 课程列表 */
  courses: ICourse[];
  /** 是否显示表单 */
  visible: boolean;
  /** 表单模式 */
  mode: 'create' | 'edit';
  /** 提交回调 */
  onSubmit: (data: IScheduleTemplateCreateRequest | IScheduleTemplateUpdateRequest) => Promise<void>;
  /** 取消回调 */
  onCancel: () => void;
  /** 是否加载中 */
  loading?: boolean;
  /** 预设日期 */
  presetDate?: string;
  /** 预设时间 */
  presetTime?: string;
}

/**
 * 课程实例卡片组件属性
 */
export interface IScheduleInstanceCardProps {
  /** 课程实例信息 */
  instance: IScheduleInstance;
  /** 学生信息 */
  student: IStudent;
  /** 课程信息 */
  course: ICourse;
  /** 课程模板信息 */
  template?: IScheduleTemplate;
  /** 编辑回调 */
  onEdit?: () => void;
  /** 取消回调 */
  onCancel?: () => void;
  /** 完成回调 */
  onComplete?: () => void;
  /** 补课回调 */
  onMakeup?: () => void;
  /** 自定义样式类名 */
  className?: string;
  /** 是否显示操作按钮 */
  showActions?: boolean;
  /** 卡片大小 */
  size?: 'small' | 'default' | 'large';
  /** 是否只读模式 */
  readonly?: boolean;
}

/**
 * 冲突信息接口
 */
export interface IScheduleConflict {
  /** 冲突类型 */
  type: 'time' | 'student' | 'teacher' | 'classroom';
  /** 冲突描述 */
  message: string;
  /** 冲突的课程实例 */
  conflictInstances: IScheduleInstance[];
  /** 冲突严重程度 */
  severity: 'warning' | 'error';
}

/**
 * 冲突解决方案接口
 */
export interface IConflictResolution {
  /** 解决方案类型 */
  type: 'ignore' | 'modify' | 'cancel';
  /** 修改后的数据 */
  modifiedData?: any;
  /** 解决方案描述 */
  description?: string;
}

/**
 * 课表冲突对话框组件属性
 */
export interface IScheduleConflictDialogProps {
  /** 冲突列表 */
  conflicts: IScheduleConflict[];
  /** 是否显示对话框 */
  visible: boolean;
  /** 解决冲突回调 */
  onResolve: (resolution: IConflictResolution) => void;
  /** 取消回调 */
  onCancel: () => void;
  /** 原始数据 */
  originalData?: any;
  /** 自定义样式类名 */
  className?: string;
}

/**
 * 时间段接口
 */
export interface ITimeSlot {
  /** 开始时间 */
  startTime: string;
  /** 结束时间 */
  endTime: string;
  /** 时间段标签 */
  label?: string;
}

/**
 * 课表网格单元格属性
 */
export interface IScheduleGridCellProps {
  /** 日期 */
  date: string;
  /** 时间段 */
  timeSlot: ITimeSlot;
  /** 该时间段的课程实例 */
  instances: IScheduleInstance[];
  /** 学生列表 */
  students: IStudent[];
  /** 课程列表 */
  courses: ICourse[];
  /** 点击回调 */
  onClick?: (date: string, timeSlot: ITimeSlot) => void;
  /** 课程实例点击回调 */
  onInstanceClick?: (instance: IScheduleInstance) => void;
  /** 是否只读模式 */
  readonly?: boolean;
  /** 自定义样式类名 */
  className?: string;
}

/**
 * 学生课表分组接口
 */
export interface IStudentScheduleGroup {
  /** 学生信息 */
  student: IStudent;
  /** 该学生的课程实例 */
  instances: IScheduleInstance[];
  /** 课程信息映射 */
  courseMap: Record<string, ICourse>;
}

/**
 * 混合课表数据接口
 */
export interface IMixedScheduleData {
  /** 时间段列表 */
  timeSlots: ITimeSlot[];
  /** 学生课表分组 */
  studentGroups: IStudentScheduleGroup[];
  /** 日期范围 */
  dateRange: {
    start: string;
    end: string;
  };
  /** 冲突信息 */
  conflicts: IScheduleConflict[];
}

/**
 * 混合课表视图组件属性
 */
export interface IMixedScheduleViewProps {
  /** 选中的学生ID列表 */
  selectedStudents: string[];
  /** 课程实例列表 */
  scheduleInstances: IScheduleInstance[];
  /** 学生列表 */
  students: IStudent[];
  /** 课程列表 */
  courses: ICourse[];
  /** 学生切换回调 */
  onStudentToggle?: (studentId: string) => void;
  /** 课程实例点击回调 */
  onInstanceClick?: (instance: IScheduleInstance) => void;
  /** 日期范围变化回调 */
  onDateRangeChange?: (start: string, end: string) => void;
  /** 视图模式 */
  viewMode?: 'timeline' | 'grid' | 'compact';
  /** 日期范围 */
  dateRange?: {
    start: string;
    end: string;
  };
  /** 自定义样式类名 */
  className?: string;
  /** 是否只读模式 */
  readonly?: boolean;
  /** 是否显示学生选择器 */
  showStudentSelector?: boolean;
  /** 最大显示学生数量 */
  maxStudents?: number;
}